package com.filldream.fastboot.common.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author RickSun
 * @Description 自定义角色权限拦截注解
 * 可注解在类上，也可以注解在方法上，如果同时注解，则注解在方法上的优先
 **/
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface RolePermissions {

    /**
     * 说明：
     * 1、value与menu表的code字段进行比较而不是menu表的menu_url比较，因为menu表的menu_url是给前端路由跳转用的
     * 2、若没有此注解的PC端接口则视为value="*"

     * 测试环境情况如下：
     * 1、若权限包含""或#则表示通过，若获取登录信息则报错
     * 2、token可选项：用户ID、真实token、不传
     * 3、token传了用户ID进来则按ID查找用户基本信息作为登录缓存
     * 4、token传了真实token进来则从缓存查询token真伪
     * 5、若接口设置了权限，则不传会报错
     *
     * 测试环境情况如下：
     * 1、若权限包含""或#则表示通过，若获取登录信息则报错
     * 2、token一律传真实token,传了就都会校验
     * 3、若接口设置了权限，则不传会报错
     *
     **/

    /**
     * 权限名称
     * 无需鉴权，无需登录：""或#
     * 无需鉴权，需登录：*
     * 需鉴权,需登录：user:add 、 *:add、 user:*
     */
    String[] value() default {"*"};

    /**
     * 匹配模式 true-全部满足 false-满足一个即可
     * @return
     */
    boolean isAnd() default true;

}